home *** CD-ROM | disk | FTP | other *** search
/ System Booster / System Booster.iso / Screenblankers / GBlanker / GSource / Blankers / Rain / blank.c next >
C/C++ Source or Header  |  1996-09-26  |  2KB  |  92 lines

  1. /*
  2.  *  Copyright (c) 1994 Michael D. Bayne.
  3.  *  All rights reserved.
  4.  *
  5.  *  Please see the documentation accompanying the distribution for distribution
  6.  *  and disclaimer information.
  7.  */
  8.  
  9. #include <exec/memory.h>
  10. #include "/includes.h"
  11.  
  12. #ifndef max
  13. #define max( x, y ) ( x > y ? x : y )
  14. #endif
  15.  
  16. #include "Rain_rev.h"
  17. STATIC const UBYTE VersTag[] = VERSTAG;
  18.  
  19. VOID Defaults( PrefObject *Prefs )
  20. {
  21.     Prefs[0].po_Level = 10;
  22.     Prefs[2].po_ModeID = getTopScreenMode();
  23.     Prefs[2].po_Depth = 2;
  24. }
  25.  
  26. LONG Blank( PrefObject *Prefs )
  27. {
  28.     LONG ToFrontCount = 0, Wid, Hei, Drops, x, y, r, i, incr, RetVal = OK;
  29.     struct RastPort *Rast;
  30.     struct Screen *Scr;
  31.     struct Window *Wnd;
  32.     
  33.     Drops = Prefs[0].po_Level;
  34.     
  35.     Scr = OpenScreenTags( 0L, SA_Depth, Prefs[2].po_Depth, SA_Quiet, TRUE,
  36.                          SA_Overscan, OSCAN_STANDARD, SA_Behind, TRUE,
  37.                          SA_DisplayID, Prefs[2].po_ModeID, TAG_DONE );
  38.     if( Scr )
  39.     {
  40.         Wid = Scr->Width;
  41.         Hei = Scr->Height;
  42.         
  43.         Rast = &( Scr->RastPort );
  44.         SetRast( Rast, 0 );
  45.         
  46.         for( i = 0; i < 4; i++ )
  47.             SetRGB4(&( Scr->ViewPort ), i, 4 * i, 4 * i, 4 * i );
  48.         
  49.         Wnd = BlankMousePointer( Scr );
  50.         ScreenToFront( Scr );
  51.         
  52.         while( RetVal == OK )
  53.         {
  54.             if(!( ++ToFrontCount % 60 ))
  55.                 ScreenToFront( Scr );
  56.             
  57.             if(!( ToFrontCount % Drops ))
  58.                 SetRast(&( Scr->RastPort ), 0 );
  59.             
  60.             r = RangeRand( Wid/13 ) + Wid/25;
  61.             x = RangeRand( Wid - 2*r ) + r;
  62.             y = RangeRand( Hei - 2*r ) + r;
  63.             
  64.             incr = max( Wid/160, 1 );
  65.  
  66.             for( i = 0; i < r; i += incr )
  67.             {
  68.                 WaitTOF();
  69.                 SetAPen( &Scr->RastPort,
  70.                         ( ULONG )RangeRand(( 1L << Prefs[2].po_Depth ) - 1 )
  71.                         + 1 );
  72.                 DrawEllipse(&( Scr->RastPort ), x, y, i, i );
  73.                 if( i )
  74.                 {
  75.                     SetAPen(&( Scr->RastPort ), 0 );
  76.                     DrawEllipse(&( Scr->RastPort ), x, y, i - incr, i - incr );
  77.                 }
  78.             }
  79.             
  80.             RetVal = ContinueBlanking();
  81.         }
  82.         UnblankMousePointer( Wnd );
  83.     }
  84.     else
  85.         RetVal = FAILED;
  86.     
  87.     if( Scr )
  88.         CloseScreen( Scr );
  89.     
  90.     return RetVal;
  91. }
  92.